#ifndef FILESTATUSICONMANAGER_H
#define FILESTATUSICONMANAGER_H

#include <QIcon>
#include <QString>
#include <QHash>
#include <QPixmap>
#include <QPainter>
#include <QColor>
#include <QFont>
#include <QFontMetrics>

/**
 * @brief 文件状态图标管理器
 * 
 * 统一管理所有文件状态图标，包括：
 * - 文件类型图标（PDF、图片、视频等）
 * - 状态图标（排队、处理中、完成、错误）
 * - 进度图标（动态饼图进度）
 * 
 * 设计原则：
 * - 单例模式，全局统一管理
 * - 图标缓存，提高性能
 * - 支持多尺寸，适配不同显示需求
 * - 遵循苹果设计美学
 */
class FileStatusIconManager
{
public:
    // 文件状态枚举
    enum class FileStatus {
        Queued,      // 排队等待
        Processing,  // 处理中
        Completed,   // 已完成
        Error        // 错误
    };
    
    // 文件类型枚举
    enum class FileType {
        PDF,         // PDF文件
        Image,       // 图片文件
        Video,       // 视频文件
        Audio,       // 音频文件
        Document,    // 文档文件
        Unknown      // 未知类型
    };
    
    // 图标尺寸枚举
    enum class IconSize {
        Small = 16,   // 小图标（文件树视图）
        Medium = 24,  // 中图标（工具栏）
        Large = 32,   // 大图标（状态栏）
        XLarge = 48   // 超大图标（大尺寸显示）
    };

    /**
     * @brief 获取单例实例
     * @return FileStatusIconManager实例
     */
    static FileStatusIconManager* instance();
    
    /**
     * @brief 根据状态和类型生成图标
     * @param status 文件状态
     * @param fileType 文件类型
     * @param progress 进度百分比（0-100，仅Processing状态有效）
     * @param size 图标尺寸
     * @return 对应的图标
     */
    static QIcon getIcon(FileStatus status, FileType fileType = FileType::Unknown, 
                        int progress = 0, IconSize size = IconSize::Small);
    
    /**
     * @brief 检测文件类型
     * @param filePath 文件路径
     * @return 文件类型
     */
    static FileType detectFileType(const QString& filePath);
    
    /**
     * @brief 创建进度图标
     * @param progress 进度百分比（0-100）
     * @param size 图标尺寸
     * @return 进度图标
     */
    static QIcon createProgressIcon(int progress, IconSize size = IconSize::Small);
    
    /**
     * @brief 获取完成状态图标
     * @param fileType 文件类型
     * @param size 图标尺寸
     * @return 完成图标
     */
    static QIcon getCompletedIcon(FileType fileType, IconSize size = IconSize::Small);
    
    /**
     * @brief 获取错误状态图标
     * @param size 图标尺寸
     * @return 错误图标
     */
    static QIcon getErrorIcon(IconSize size = IconSize::Small);
    
    /**
     * @brief 获取排队状态图标
     * @param size 图标尺寸
     * @return 排队图标
     */
    static QIcon getQueuedIcon(IconSize size = IconSize::Small);
    
    /**
     * @brief 获取文件类型图标
     * @param fileType 文件类型
     * @param size 图标尺寸
     * @return 文件类型图标
     */
    static QIcon getFileTypeIcon(FileType fileType, IconSize size = IconSize::Small);
    
    /**
     * @brief 清除图标缓存
     */
    static void clearCache();
    
    /**
     * @brief 获取缓存统计信息
     * @return 缓存大小
     */
    static int getCacheSize();

private:
    FileStatusIconManager() = default;
    ~FileStatusIconManager() = default;
    FileStatusIconManager(const FileStatusIconManager&) = delete;
    FileStatusIconManager& operator=(const FileStatusIconManager&) = delete;
    
    // 图标缓存
    static QHash<QString, QIcon> s_iconCache;
    static QHash<QString, QPixmap> s_pixmapCache;
    
    // 生成图标的方法
    static QIcon generateIcon(const QString& key, IconSize size);
    static QPixmap generateProgressPixmap(int progress, IconSize size);
    static QPixmap generateFileTypePixmap(FileType fileType, IconSize size);
    static QPixmap generateStatusPixmap(FileStatus status, IconSize size);
    
    // 生成缓存键
    static QString generateCacheKey(const QString& type, const QString& name, IconSize size);
    
    // 绘制辅助方法
    static void drawProgressPie(QPainter& painter, const QRect& rect, int progress);
    static void drawFileTypeIcon(QPainter& painter, const QRect& rect, FileType fileType);
    static void drawStatusIcon(QPainter& painter, const QRect& rect, FileStatus status);
    
    // 颜色定义
    static QColor getPrimaryColor();
    static QColor getSuccessColor();
    static QColor getWarningColor();
    static QColor getErrorColor();
    static QColor getMutedColor();
};

#endif // FILESTATUSICONMANAGER_H
